package grafica;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.util.Observable;
import java.util.Observer;


public class CerchioVista implements Observer,Forma {
	
	private Cerchio cerchio;
	private boolean riempimento;
	private Color colore;
	
	
	/**
	 * @return the riempimento
	 */
	public boolean isRiempimento() {
		return riempimento;
	}
	/**
	 * @param riempimento the riempimento to set
	 */
	public void setRiempimento(boolean riempimento) {
		this.riempimento = riempimento;
	}
	/**
	 * @return the colore
	 */
	public Color getColore() {
		return colore;
	}
	/**
	 * @param colore the colore to set
	 */
	public void setColore(Color colore) {
		this.colore = colore;
	}
	/**
	 * @param cerchio
	 */
	public CerchioVista(Cerchio cerchio) {
		super();
		this.cerchio = cerchio;
		cerchio.addObserver(this);
	}
	public CerchioVista(Cerchio cerchio,Color colore) {
		super();
		this.cerchio = cerchio;
		this.colore=colore;
		cerchio.addObserver(this);
		
	}
	//TODO
	public void update(Observable arg0, Object arg1) {
		//repaint();
		}
	public void draw(Graphics oggetto) {
		if(riempimento){
			oggetto.drawOval((cerchio.getX()-cerchio.getRaggio()/2), 
							 (cerchio.getY()-cerchio.getRaggio()/2), 
							 cerchio.getRaggio(),
							 cerchio.getRaggio() );
		}else{
			Color colo=oggetto.getColor();
			oggetto.setColor(this.colore);
			oggetto.fillOval((cerchio.getX()-cerchio.getRaggio()/2), 
							 (cerchio.getY()-cerchio.getRaggio()/2), 
							 cerchio.getRaggio(),
							 cerchio.getRaggio() );
			oggetto.setColor(colo);
		}		
	}
	/**
	 * @return the cerchio
	 */
	public Cerchio getCerchio() {
		return cerchio;
	}
	/**
	 * @param cerchio the cerchio to set
	 */
	public void setCerchio(Cerchio cerchio) {
		this.cerchio = cerchio;
	}
	public boolean puntoAppartenenza(int x,int y){
		double valore=(double)((this.cerchio.getX()-x)*(this.cerchio.getX()-x)+(this.getCerchio().getY()-y)*(this.getCerchio().getY()-y));
		double distanza=Math.sqrt(valore);
		
		if(distanza<=(this.getCerchio().getRaggio()/2))
			return true;
		return false;
	}

	public boolean intersezioneRettangolo(RettangoloBase istanza) {
		Area are=new Area(new Ellipse2D.Double(cerchio.getX()-cerchio.getRaggio()/2, 
											   cerchio.getY()-cerchio.getRaggio()/2, 
											   cerchio.getRaggio(),
											   cerchio.getRaggio()));
		if(are.intersects(istanza.getX(), istanza.getY(), istanza.getBase(), istanza.getAltezza()))
			return true;
		return false;
	}
}
